export default {
    // 为当前模块开启命名空间
    namespaced: true,
    
    // 模块的state 数据
    state: () => ({
        // 购物车的数组，用来存储购物车每个商品的信息对象
        // 每个商品的信息对象，都包含如下 6 个属性
        // {goods_id,goods_name,goods_price,goods_count,goods_small_logo,goods_state}
        cart: JSON.parse(uni.getStorageSync('cart') || '[]')
    }),
    
    //模块的mutations 方法
    mutations:{
        addToCart(state,goods){
            const findResult = state.cart.find((x)=> x.goods_id === goods.goods_id)
            console.log(findResult);
            if(!findResult){
                // 如果购物车中没有这件商品，则直接push
                state.cart.push(goods)
            }else{
                // 如果购物车中有这件商品，则只更新数量即可
                findResult.goods_count++
            }
            
            // 通过commit方法，调用m_cart命名空间下的saveToStoreage 方法
            this.commit('m_cart/saveToStorage')
        },
        saveToStorage(state){
            uni.setStorageSync('cart',JSON.stringify(state.cart))
        },
        updateGoodsState(state,goods){
            const findResult = state.cart.find(x=> x.goods_id === goods.goods_id)
            
            // 有对应的商品信息对象
            if(findResult){
                // 更新对应商品的勾选状态
                findResult.goods_state = goods.goods_state
                //持久化存储到本地
                this.commit('m_cart/saveToStorage')
            }
        },
        updateGoodsCount(state,goods) {
            const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
            
            if(findResult) {
                findResult.goods_count = goods.goods_count
                this.commit('m_cart/saveToStorage')
            }
        },
        removeGoodsById(state,goods_id){
            // 调用数组的filter方法进行过滤
            state.cart = state.cart.filter(x => x.goods_id !== goods_id)
            this.commit('m_cart/saveToStorage')
        },
        updateAllGoodsState(state,newState){
            state.cart.forEach(x => x.goods_state = newState)
            this.commit('m_cart/saveToStorage')
        }
    },
    
    // 模块的getters 属性
    getters: {
        // 统计购物车中商品的总数
        total(state){
            // let c= 0;
            // // 循环统计商品的数量，累加到变量C中
            // state.cart.forEach( goods => c += goods.goods_count)
            // return c
            return state.cart.reduce( (total,item) => total += item.goods_count,0)
        },
        checkedCount(state){
            return state.cart.filter(x => x.goods_state).reduce( (total,item)=> total +=item.goods_count,0)
        },
        // 已勾选的商品的总价
        checkedGoodsAmount(state) {
          // 先使用 filter 方法，从购物车中过滤器已勾选的商品
          // 再使用 reduce 方法，将已勾选的商品数量 * 单价之后，进行累加
          // reduce() 的返回值就是已勾选的商品的总价
          // 最后调用 toFixed(2) 方法，保留两位小数
          return state.cart.filter(x => x.goods_state)
                           .reduce((total, item) => total += item.goods_count * item.goods_price, 0)
                           .toFixed(2)
        }
    },
}